package com.car.service.impl;

import com.car.pojo.PageResult;
import com.car.pojo.Feedback;
import com.car.mapper.FeedbackMapper;
import com.car.service.FeedbackService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 投诉建议服务实现类
 */
@Slf4j
@Service
public class FeedbackServiceImpl implements FeedbackService {

    @Autowired
    private FeedbackMapper feedbackMapper;

    @Override
    public PageResult<Feedback> page(Map<String, Object> params) {
        // 设置分页参数
        Integer page = params != null && params.get("page") != null ? Integer.parseInt(params.get("page").toString()) : 1;
        Integer pageSize = params != null && params.get("pageSize") != null ? Integer.parseInt(params.get("pageSize").toString()) : 10;
        
        // 开始分页
        PageHelper.startPage(page, pageSize);
        
        // 查询列表
        Page<Feedback> feedbackPage = feedbackMapper.getFeedbackList(params);
        
        // 构建分页结果
        return new PageResult<>(feedbackPage.getTotal(), feedbackPage.getResult());
    }

    @Transactional(rollbackFor = {Exception.class})
    @Override
    public void save(Feedback feedback) {
        log.info("保存投诉建议: {}", feedback);
        // 设置默认值
        feedback.setStatus("0"); // 初始状态为未处理
        feedback.setCreateTime(new Date());
        
        // 保存到数据库
        feedbackMapper.addFeedback(feedback);
    }

    @Override
    public Feedback getInfo(Integer id) {
        log.info("查询投诉建议详情，ID: {}", id);
        return feedbackMapper.getFeedbackDetail(id);
    }
    
    @Transactional(rollbackFor = {Exception.class})
    @Override
    public void update(Map<String, Object> params) {
        log.info("更新投诉建议状态: {}", params);
        // 获取参数
        Integer id = params.get("id") != null ? Integer.parseInt(params.get("id").toString()) : null;
        String status = params.get("status") != null ? params.get("status").toString() : null;
        String processRemark = params.get("processRemark") != null ? params.get("processRemark").toString() : null;
        
        // 验证必要参数
        if (id == null || status == null) {
            throw new IllegalArgumentException("参数不完整");
        }
        
        // 创建反馈对象
        Feedback feedback = new Feedback();
        feedback.setId(id);
        feedback.setStatus(status);
        feedback.setProcessRemark(processRemark);
        
        // 如果状态是已处理，设置处理时间
        if ("1".equals(status)) {
            feedback.setProcessTime(new Date());
        }
        
        // 更新数据库
        feedbackMapper.updateFeedbackStatus(feedback);
    }
    
    @Override
    public List<Feedback> list() {
        log.info("查询所有投诉建议列表");
        // 使用分页参数为null查询所有数据
        Page<Feedback> feedbackPage = feedbackMapper.getFeedbackList(null);
        return feedbackPage.getResult();
    }
}